<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // var name = '张三'
    //     age = 18
    // var obj = {
    //     name: '李四',
    //     age: 18,
    //     myFun: function(){
    //         console.log(
    //             this.name + '年龄' + this.age                
    //         );
    //     }
    // }
    // console.log(obj.age);  //18
    // obj.myFun(); //小李年龄18


    // call()、apply()、bind() 都是用来重定义 this 这个对象的！
    //以上出了 bind 方法后面多了个 () 外 ，结果返回都一致！
    //由此得出结论，bind 返回的是一个新的函数，你必须调用它才会被执行。
    // var name = '张三' 
    //     age = 18
    // var obj = {
    //     name: '小李',
    //     age: this.age,
    //     myFun: function (){
    //         console.log(
    //             this.name + this.age 
    //         );
    //     }
    // } 
    // var db = {
    //     name: '盖伦',
    //     age: 800
    // }
    // obj.myFun.call(db)
    // obj.myFun.apply(db)
    // obj.myFun.bind(db)()

    // 2，对比call 、bind 、 apply 传参情况下
    // var name = '张三'
    //     age = 18
    // var obj = {
    //     name: '小李',
    //     age: this.age,
    //     myFun: function (){
    //         console.log(
    //             this.name + '年龄' + this.age
    //         )
    //     }
    // }
    // var db = {
    //     name: '盖伦',
    //     age: 800
    // }     

    // obj.myFun.call(db,'哈喽', '小帕赛')
    // obj.myFun.apply(db, ['哈喽', '小帕赛'])
    // obj.myFun.bind(db, '哈喽', '小帕赛')()

    // 1.求数组中最大的值
    // var arr = [2, 3, 4, 5, 6]
    // console.log(Math.max.apply(null, arr))
    
    // 2. 改变this指向获取不同的名字
    function getInfo(age){
        return '我的姓名是' +this.name+'我的年龄'+age
    }

    let person = {
        name: '小明',
        sex: '男'
    }

    //通过person对象调用getInfo方法
    getInfo.call(person,18)
    getInfo.apply(person, [18])
    getInfo.bind(person,18)()

</script>
</html>